using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Marlimer.Logical.Comercial;
using Marlimer.Logical.Universal ;
using Marlimer.Common; 

namespace Marlimer.Comercial.Procesos
{
    public partial class frm_GenerarDocumentos : Form
    {

        luni_TipoDocVta luni_tipodocvta = new luni_TipoDocVta();
        lcom_Ruta lcom_ruta = new lcom_Ruta();
        lcom_PedidoCab lcom_pedidocab = new lcom_PedidoCab(); 

        public frm_GenerarDocumentos()
        {
            InitializeComponent();
        }

        private void btnNuevaBusqueda_Click(object sender, EventArgs e)
        {
            nuevaBusqueda();
        }

        private void frm_GenerarDocumentos_Load(object sender, EventArgs e)
        {
            dtpFechaPedido.Value = System.DateTime.Today;
            cargarCombos(); 
            ConfigurarRejilla();

        }


        private void ConfigurarRejilla()
        {
            gridResultados.Columns.Clear();
            gridResultados.Columns.Add(Util.createDataGridTextColumn("ctip_docvta", 0, true, false, DataGridViewContentAlignment.MiddleLeft));
            gridResultados.Columns.Add(Util.createDataGridTextColumn("Doc. Vta", 120, true, true, DataGridViewContentAlignment.MiddleLeft));
            gridResultados.Columns.Add(Util.createDataGridTextColumn("Pedidos", 100, true, true, DataGridViewContentAlignment.MiddleRight));
            gridResultados.Columns.Add(Util.createDataGridTextColumn("Serie", 90, true, true, DataGridViewContentAlignment.MiddleRight));
            gridResultados.Columns.Add(Util.createDataGridTextColumn("Inicio", 100, false, true, DataGridViewContentAlignment.MiddleRight));
            gridResultados.Columns.Add(Util.createDataGridTextColumn("Termino", 100, true, true, DataGridViewContentAlignment.MiddleRight));
            
            //gridResultados.AllowUserToResizeColumns = false;
            gridResultados.AllowUserToResizeRows = false;
            gridResultados.RowHeadersVisible = false;
            gridResultados.AllowUserToAddRows = false;
                            
        }

        private void cargarCombos()
        {
            Util.LlenarDataCombo(lcom_ruta.getDTRuta(), cboRuta, true);
            Util.LlenarDataCombo(luni_tipodocvta.getDTTipoDocvta(), cboTipoDocVta, true);
        }

        private void nuevaBusqueda()
        {
            cargarCombos();
            txtCodCliente.Text = "";
            txtCodRuta.Text = "";
            gridResultados.Rows.Clear();   
            //desbloquear /bloquear controles
            txtCodCliente.Enabled = true;
            txtCodRuta.Enabled = true;
            cboRuta.Enabled = true;
            dtpFechaPedido.Enabled = true;
            cboTipoDocVta.Enabled = true;
            btnBuscar.Enabled = true;

            btnGeneraDocs.Enabled = false;
            dtpFechaFacturacion.Enabled = false; 


        }

        private void txtGeneralEntero_KeyPress(object sender, KeyPressEventArgs e)
        {
            e.Handled = Util.validaTecla(e.KeyChar, "Entero", ((TextBox)sender).Text, true);
        }

        private void txtGeneral_Enter(object sender, EventArgs e)
        {
            Util.selectAllText((TextBox)sender);
        }

        private void cboGeneral_KeyPress(object sender, KeyPressEventArgs e)
        {
            Util.validaEnter(e.KeyChar);
        }

        private void txtGeneral_Leave(object sender, EventArgs e)
        {
            TextBox txt = (TextBox)sender;
            String value = "";
            int valuenum = -1;
            String nametxt = txt.Name;
            object newval = null;

            if (txt.Text.Trim() != "")
            {
                value = txt.Text;
                valuenum = Convert.ToInt32(Util.ToValor(txt.Text));
            }

            switch (nametxt)
            {
                case "txtCodRuta":
                    {
                        cboRuta.SelectedValue = valuenum;
                        newval = cboRuta.SelectedValue;
                        break;
                    }
            }
            txt.Text = Convert.ToString(newval);
        }

        private void cboGeneralDT_SelectedIndexChanged(object sender, EventArgs e)
        {
            ComboBox cbo = (ComboBox)sender;
            String valor = "";
            String namecbo = cbo.Name;
            //validamos que el indice seleccionado sea mayor a -1
            if (cbo.SelectedIndex > -1 && cbo.SelectedValue.ToString() != "System.Data.DataRowView")
            {
                valor = Convert.ToString(cbo.SelectedValue);
            }

            switch (namecbo)
            {
                case "cboRuta":
                    {
                        txtCodRuta.Text = valor;
                        break;
                    }
            }
        }


        private void dtpFechaPedido_ValueChanged(object sender, EventArgs e)
        {
            if (dtpFechaPedido.Value.DayOfWeek == DayOfWeek.Saturday)
            {
                dtpFechaFacturacion.Value = dtpFechaPedido.Value.AddDays(2);
            }
            else
            {
                dtpFechaFacturacion.Value = dtpFechaPedido.Value.AddDays(1);
            }
        
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            DataTable dt = lcom_pedidocab.getMostrarPedidoProcesar(Session.getParametros().ccod_cia, Session.getParametros().cnum_serie, 
                    dtpFechaPedido.Value, Convert.ToInt32(cboTipoDocVta.SelectedValue), Convert.ToInt32(cboRuta.SelectedValue), 
                    Convert.ToInt32(Util.ToValor(txtCodCliente.Text)));
            gridResultados.Rows.Clear();
            if (dt.Rows.Count > 0)
            {
                //llenar grilla

                int ctip_docvta;
                String cdes_docvta;
                int npeds;
                long maxnumdoc;

                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    ctip_docvta = Convert.ToInt32(Util.getValueDT("ctip_docvta", i, dt));
                    cdes_docvta = Convert.ToString(Util.getValueDT("cdes_docvta", i, dt));
                    npeds = Convert.ToInt32(Util.getValueDT("npeds", i, dt)); 
                    maxnumdoc = Convert.ToInt32(Util.getValueDT("maxnumdoc",i,dt));
                    gridResultados.Rows.Add(ctip_docvta, cdes_docvta, npeds, Session.getParametros().cnum_serie, maxnumdoc, maxnumdoc + npeds - 1);
                }

                //desactivar controles
                dtpFechaPedido.Enabled = false;
                cboTipoDocVta.Enabled = false;
                cboRuta.Enabled = false;
                txtCodCliente.Enabled = false;
                txtCodRuta.Enabled = false; 
                btnBuscar.Enabled = false;
                btnGeneraDocs.Enabled = true;
                dtpFechaFacturacion.Enabled = true; 
            }
            else
            {
                MessageBox.Show("No se encontraron resultados.", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); 

            }
        }

        private void gridResultados_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
            object value = gridResultados.Rows[e.RowIndex].Cells[e.ColumnIndex].Value;
            if (!Util.IsNumeric(value.ToString()) && e.ColumnIndex == 4)
            {
                MessageBox.Show("Debe ingresar un valor numerico.", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                gridResultados.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = 0;
            }
            else
            {
                gridResultados.Rows[e.RowIndex].Cells[5].Value = Convert.ToInt32(gridResultados.Rows[e.RowIndex].Cells[4].Value) + Convert.ToInt32(gridResultados.Rows[e.RowIndex].Cells[2].Value) - 1;
            }
        }

        private void btnGeneraDocs_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("Seguro que desea generar los documentos de venta?", this.Text, MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
            {
                lcom_DocumentoCab lcom_documentocab = new lcom_DocumentoCab();
                Boolean resultado = true;
                resulMsgError resul = new resulMsgError(false,"");
                int cnum_serie;
                int cnum_inidoc;
                int cnum_findoc;
                int ctip_docvta;
                //se recorre la grilla 
                for (int i = 0; i < gridResultados.Rows.Count; i++)
                {
                    cnum_serie = Convert.ToInt32(gridResultados.Rows[i].Cells[3].Value);
                    cnum_inidoc = Convert.ToInt32(gridResultados.Rows[i].Cells[4].Value);
                    cnum_findoc = Convert.ToInt32(gridResultados.Rows[i].Cells[5].Value);
                    ctip_docvta = Convert.ToInt32(gridResultados.Rows[i].Cells[0].Value);

                    resul = lcom_documentocab.documentosFromPedido(Session.getParametros().ccod_cia, cnum_serie, cnum_inidoc, cnum_findoc,  dtpFechaPedido.Value, dtpFechaFacturacion.Value, ctip_docvta, Convert.ToInt32(cboRuta.SelectedValue), Convert.ToInt32(Util.ToValor(txtCodCliente.Text)));
                    if (!resul.resul)
                    {
                        MessageBox.Show(Convert.ToString(gridResultados.Rows[i].Cells[1].Value) + " " + resul.message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                    resultado = resultado && resul.resul;
                }

                if (resultado)
                {
                    MessageBox.Show(resul.message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
                    nuevaBusqueda(); 
                }
            }
        }
    }
}